package com.cleaningcloud.erp.service;

import java.util.List;
import java.util.Map;
import java.util.Objects;

import com.cleaningcloud.erp.domain.ErpAccountsPayable;
import com.cleaningcloud.erp.domain.ErpAccountsReceivable;
import com.cleaningcloud.erp.domain.vo.ErpAccountsReceivableVo;

/**
 * 应收账款Service接口
 * 
 * @author cleaningcloud
 * @date 2024-10-02
 */
public interface IErpAccountsReceivableService 
{
    /**
     * 查询应收账款
     * 
     * @param receivableId 应收账款主键
     * @return 应收账款
     */
    ErpAccountsReceivable selectErpAccountsReceivableByReceivableId(Long receivableId);

    /**
     * 查询应收账款列表
     * 
     * @param erpAccountsReceivable 应收账款
     * @return 应收账款集合
     */
    List<ErpAccountsReceivableVo> selectErpAccountsReceivableList(ErpAccountsReceivable erpAccountsReceivable);

    /**
     * 新增应收账款
     * 
     * @param erpAccountsReceivable 应收账款
     * @return 结果
     */
    int insertErpAccountsReceivable(ErpAccountsReceivable erpAccountsReceivable);

    /**
     * 修改应收账款
     * 
     * @param erpAccountsReceivable 应收账款
     * @return 结果
     */
    int updateErpAccountsReceivable(ErpAccountsReceivable erpAccountsReceivable);

    /**
     * 批量删除应收账款
     * 
     * @param receivableIds 需要删除的应收账款主键集合
     * @return 结果
     */
    int deleteErpAccountsReceivableByReceivableIds(Long[] receivableIds);

    /**
     * 删除应收账款信息
     * 
     * @param receivableId 应收账款主键
     * @return 结果
     */
    int deleteErpAccountsReceivableByReceivableId(Long receivableId);




    /**
     * 应付账款收款
     * @param erpAccountsReceivable
     * @return
     */
    int receivingPaymentsErpAccountsPayable(ErpAccountsReceivable erpAccountsReceivable);


    /**
     * 应付账款开票
     * @param erpAccountsReceivable
     * @return
     */
    int invoicingErpAccountsPayable(ErpAccountsReceivable erpAccountsReceivable);

    /**
     * 应收账款顶部统计
     * @return
     */
    Map<String, Objects> statistics();
}
